ERL_FILE
  PsiComment(function_doc_comment)('%% -*- mode: erlang;erlang-indent-level: 4;indent-tabs-mode: nil -*-')
  PsiComment(function_doc_comment)('%% ex: ts=4 sw=4 ft=erlang et')
  PsiComment(function_doc_comment)('%% This is a sample rebar.conf file that shows examples of some of rebar's')
  PsiComment(function_doc_comment)('%% options.')
  PsiComment(function_doc_comment)('%% == Core ==')
  PsiComment(function_doc_comment)('%% Additional library directories to add to the code path')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('lib_dirs')
    PsiElement(,)(',')
    ERL_LIST_EXPRESSION
      PsiElement([)('[')
      PsiElement(])(']')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% == Erlang Compiler ==')
  PsiComment(function_doc_comment)('%% Erlang files to compile before the rest. Rebar automatically compiles')
  PsiComment(function_doc_comment)('%% parse_transforms and custom behaviours before anything other than the files')
  PsiComment(function_doc_comment)('%% in this list.')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('erl_first_files')
    PsiElement(,)(',')
    ERL_LIST_EXPRESSION
      PsiElement([)('[')
      ERL_STRING_LITERAL
        PsiElement(string)('"mymib1"')
      PsiElement(,)(',')
      ERL_STRING_LITERAL
        PsiElement(string)('"mymib2"')
      PsiElement(])(']')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% Erlang compiler options')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('erl_opts')
    PsiElement(,)(',')
    ERL_LIST_EXPRESSION
      PsiElement([)('[')
      ERL_CONFIG_EXPRESSION
        ERL_Q_ATOM
          ERL_ATOM
            PsiElement(atom_name)('no_debug_info')
      PsiElement(,)(',')
      ERL_TUPLE_EXPRESSION
        PsiElement({)('{')
        ERL_CONFIG_EXPRESSION
          ERL_Q_ATOM
            ERL_ATOM
              PsiElement(atom_name)('i')
        PsiElement(,)(',')
        ERL_STRING_LITERAL
          PsiElement(string)('"myinclude"')
        PsiElement(})('}')
      PsiElement(,)(',')
      ERL_TUPLE_EXPRESSION
        PsiElement({)('{')
        ERL_CONFIG_EXPRESSION
          ERL_Q_ATOM
            ERL_ATOM
              PsiElement(atom_name)('src_dirs')
        PsiElement(,)(',')
        ERL_LIST_EXPRESSION
          PsiElement([)('[')
          ERL_STRING_LITERAL
            PsiElement(string)('"src1"')
          PsiElement(,)(',')
          ERL_STRING_LITERAL
            PsiElement(string)('"src2"')
          PsiElement(])(']')
        PsiElement(})('}')
      PsiElement(,)(',')
      ERL_TUPLE_EXPRESSION
        PsiElement({)('{')
        ERL_CONFIG_EXPRESSION
          ERL_Q_ATOM
            ERL_ATOM
              PsiElement(atom_name)('platform_define')
        PsiElement(,)(',')
        ERL_STRING_LITERAL
          PsiElement(string)('"(linux|solaris|freebsd|darwin)"')
        PsiElement(,)(',')
        ERL_CONFIG_EXPRESSION
          ERL_Q_ATOM
            ERL_ATOM
              PsiElement(single_quote)(''')
              PsiElement(atom_name)('HAVE_SENDFILE')
              PsiElement(single_quote)(''')
        PsiElement(})('}')
      PsiElement(,)(',')
      ERL_TUPLE_EXPRESSION
        PsiElement({)('{')
        ERL_CONFIG_EXPRESSION
          ERL_Q_ATOM
            ERL_ATOM
              PsiElement(atom_name)('platform_define')
        PsiElement(,)(',')
        ERL_STRING_LITERAL
          PsiElement(string)('"(linux|freebsd)"')
        PsiElement(,)(',')
        ERL_CONFIG_EXPRESSION
          ERL_Q_ATOM
            ERL_ATOM
              PsiElement(single_quote)(''')
              PsiElement(atom_name)('BACKLOG')
              PsiElement(single_quote)(''')
        PsiElement(,)(',')
        ERL_CONFIG_EXPRESSION
          PsiElement(integer)('128')
        PsiElement(})('}')
      PsiElement(,)(',')
      ERL_TUPLE_EXPRESSION
        PsiElement({)('{')
        ERL_CONFIG_EXPRESSION
          ERL_Q_ATOM
            ERL_ATOM
              PsiElement(atom_name)('platform_define')
        PsiElement(,)(',')
        ERL_STRING_LITERAL
          PsiElement(string)('"R13"')
        PsiElement(,)(',')
        ERL_CONFIG_EXPRESSION
          ERL_Q_ATOM
            ERL_ATOM
              PsiElement(single_quote)(''')
              PsiElement(atom_name)('old_inets')
              PsiElement(single_quote)(''')
        PsiElement(})('}')
      PsiElement(])(']')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% MIB Options?')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('mib_opts')
    PsiElement(,)(',')
    ERL_LIST_EXPRESSION
      PsiElement([)('[')
      PsiElement(])(']')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% SNMP mibs to compile first?')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('mib_first_files')
    PsiElement(,)(',')
    ERL_LIST_EXPRESSION
      PsiElement([)('[')
      PsiElement(])(']')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% == EDoc ==')
  PsiComment(function_doc_comment)('%% EDoc options')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('edoc_opts')
    PsiElement(,)(',')
    ERL_LIST_EXPRESSION
      PsiElement([)('[')
      PsiElement(])(']')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% == Port Compiler ==')
  PsiComment(function_doc_comment)('%% Port compilation environment variables. See rebar_port_compiler.erl for')
  PsiComment(function_doc_comment)('%% more info. Default is `[]'')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('port_env')
    PsiElement(,)(',')
    ERL_LIST_EXPRESSION
      PsiElement([)('[')
      ERL_TUPLE_EXPRESSION
        PsiElement({)('{')
        ERL_STRING_LITERAL
          PsiElement(string)('"CFLAGS"')
        PsiElement(,)(',')
        ERL_STRING_LITERAL
          PsiElement(string)('"$CFLAGS -Ifoo"')
        PsiElement(})('}')
      PsiElement(,)(',')
      ERL_TUPLE_EXPRESSION
        PsiElement({)('{')
        ERL_STRING_LITERAL
          PsiElement(string)('"freebsd"')
        PsiElement(,)(',')
        ERL_STRING_LITERAL
          PsiElement(string)('"LDFLAGS"')
        PsiElement(,)(',')
        ERL_STRING_LITERAL
          PsiElement(string)('"$LDFLAGS -lfoo"')
        PsiElement(})('}')
      PsiElement(])(']')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% port_specs')
  PsiComment(function_doc_comment)('%% List of filenames or wildcards to be compiled. May also contain a tuple')
  PsiComment(function_doc_comment)('%% consisting of a regular expression to be applied against the system')
  PsiComment(function_doc_comment)('%% architecture as a filter.')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('port_specs')
    PsiElement(,)(',')
    ERL_LIST_EXPRESSION
      PsiElement([)('[')
      ERL_TUPLE_EXPRESSION
        PsiElement({)('{')
        ERL_STRING_LITERAL
          PsiElement(string)('"priv/so_name.so"')
        PsiElement(,)(',')
        ERL_LIST_EXPRESSION
          PsiElement([)('[')
          ERL_STRING_LITERAL
            PsiElement(string)('"c_src/*.c"')
          PsiElement(])(']')
        PsiElement(})('}')
      PsiElement(,)(',')
      ERL_TUPLE_EXPRESSION
        PsiElement({)('{')
        ERL_STRING_LITERAL
          PsiElement(string)('"linux"')
        PsiElement(,)(',')
        ERL_STRING_LITERAL
          PsiElement(string)('"priv/hello_linux"')
        PsiElement(,)(',')
        ERL_LIST_EXPRESSION
          PsiElement([)('[')
          ERL_STRING_LITERAL
            PsiElement(string)('"c_src/hello_linux.c"')
          PsiElement(])(']')
        PsiElement(})('}')
      PsiElement(,)(',')
      ERL_TUPLE_EXPRESSION
        PsiElement({)('{')
        ERL_STRING_LITERAL
          PsiElement(string)('"linux"')
        PsiElement(,)(',')
        ERL_STRING_LITERAL
          PsiElement(string)('"priv/hello_linux"')
        PsiElement(,)(',')
        ERL_LIST_EXPRESSION
          PsiElement([)('[')
          ERL_STRING_LITERAL
            PsiElement(string)('"c_src/*.c"')
          PsiElement(])(']')
        PsiElement(,)(',')
        ERL_LIST_EXPRESSION
          PsiElement([)('[')
          ERL_TUPLE_EXPRESSION
            PsiElement({)('{')
            ERL_CONFIG_EXPRESSION
              ERL_Q_ATOM
                ERL_ATOM
                  PsiElement(atom_name)('env')
            PsiElement(,)(',')
            ERL_LIST_EXPRESSION
              PsiElement([)('[')
              PsiElement(])(']')
            PsiElement(})('}')
          PsiElement(])(']')
        PsiElement(})('}')
      PsiElement(])(']')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% == LFE Compiler ==')
  PsiComment(function_doc_comment)('%% LFE files to compile before the rest')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('lfe_first_files')
    PsiElement(,)(',')
    ERL_LIST_EXPRESSION
      PsiElement([)('[')
      PsiElement(])(']')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% Options for the LFE compiler: reuse {erl_opts, []}')
  PsiComment(function_doc_comment)('%% == ErlyDTL Compiler ==')
  PsiComment(function_doc_comment)('%% Options for the ErlyDTL compiler')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('erlydtl_opts')
    PsiElement(,)(',')
    ERL_LIST_EXPRESSION
      PsiElement([)('[')
      PsiElement(])(']')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% == EUnit ==')
  PsiComment(function_doc_comment)('%% Options for eunit:test()')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('eunit_opts')
    PsiElement(,)(',')
    ERL_LIST_EXPRESSION
      PsiElement([)('[')
      PsiElement(])(']')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% Additional compile options for eunit. erl_opts is also used')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('eunit_compile_opts')
    PsiElement(,)(',')
    ERL_LIST_EXPRESSION
      PsiElement([)('[')
      PsiElement(])(']')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% Same as erl_first_files, but used only when running 'eunit'')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('eunit_first_files')
    PsiElement(,)(',')
    ERL_LIST_EXPRESSION
      PsiElement([)('[')
      PsiElement(])(']')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% == Cover ==')
  PsiComment(function_doc_comment)('%% Whether to enable coverage reporting. Default is `false'')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('cover_enabled')
    PsiElement(,)(',')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('false')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% Whether to print coverage report to console. Default is `false'')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('cover_print_enabled')
    PsiElement(,)(',')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('false')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% Whether to export coverage report to file. Default is `false'')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('cover_export_enabled')
    PsiElement(,)(',')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('false')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% == Common Test ==')
  PsiComment(function_doc_comment)('%% Override the default "test" directory in which SUITEs are located')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('ct_dir')
    PsiElement(,)(',')
    ERL_STRING_LITERAL
      PsiElement(string)('"itest"')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% Override the default "logs" directory in which SUITEs are logged')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('ct_log_dir')
    PsiElement(,)(',')
    ERL_STRING_LITERAL
      PsiElement(string)('"test/logs"')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% Option to pass extra parameters when launching Common Test')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('ct_extra_params')
    PsiElement(,)(',')
    ERL_STRING_LITERAL
      PsiElement(string)('"-boot start_sasl -s myapp"')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% Option to use short names (i.e., -sname test) when starting ct')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('ct_use_short_names')
    PsiElement(,)(',')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('true')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% == QuickCheck ==')
  PsiComment(function_doc_comment)('%% If qc_mod is unspecified, rebar tries to detect Triq or EQC')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('qc_opts')
    PsiElement(,)(',')
    ERL_LIST_EXPRESSION
      PsiElement([)('[')
      ERL_TUPLE_EXPRESSION
        PsiElement({)('{')
        ERL_CONFIG_EXPRESSION
          ERL_Q_ATOM
            ERL_ATOM
              PsiElement(atom_name)('qc_mod')
        PsiElement(,)(',')
        ERL_CONFIG_CALL_EXPRESSION
          ERL_Q_ATOM
            ERL_ATOM
              PsiElement(atom_name)('module')
          ERL_ARGUMENT_LIST
            PsiElement(()('(')
            PsiElement())(')')
        PsiElement(})('}')
      PsiElement(,)(',')
      ERL_CONFIG_EXPRESSION
        ERL_Q_VAR
          PsiElement(var)('Options')
      PsiElement(])(']')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% Additional compile options for qc. erl_opts is also used')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('qc_compile_opts')
    PsiElement(,)(',')
    ERL_LIST_EXPRESSION
      PsiElement([)('[')
      PsiElement(])(']')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% Same as erl_first_files, but used only when running 'qc'')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('qc_first_files')
    PsiElement(,)(',')
    ERL_LIST_EXPRESSION
      PsiElement([)('[')
      PsiElement(])(']')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% == Cleanup ==')
  PsiComment(function_doc_comment)('%% Which files to cleanup')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('clean_files')
    PsiElement(,)(',')
    ERL_LIST_EXPRESSION
      PsiElement([)('[')
      ERL_STRING_LITERAL
        PsiElement(string)('"file"')
      PsiElement(,)(',')
      ERL_STRING_LITERAL
        PsiElement(string)('"file2"')
      PsiElement(])(']')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% == Reltool ==')
  PsiComment(function_doc_comment)('%% Target directory for the release')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('target')
    PsiElement(,)(',')
    ERL_STRING_LITERAL
      PsiElement(string)('"target"')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% == OTP Applications ==')
  PsiComment(function_doc_comment)('%% Binaries to link into the erlang path?')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('app_bin')
    PsiElement(,)(',')
    ERL_LIST_EXPRESSION
      PsiElement([)('[')
      PsiElement(])(']')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% Enable validation of the OTP app module list. Default is 'true'')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('validate_app_modules')
    PsiElement(,)(',')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('true')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% == Dependencies ==')
  PsiComment(function_doc_comment)('%% Where to put any downloaded dependencies. Default is "deps"')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('deps_dir')
    PsiElement(,)(',')
    ERL_STRING_LITERAL
      PsiElement(string)('"deps"')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% What dependencies we have, dependencies can be of 3 forms, an application')
  PsiComment(function_doc_comment)('%% name as an atom, eg. mochiweb, a name and a version (from the .app file), or')
  PsiComment(function_doc_comment)('%% an application name, a version and the SCM details on how to fetch it (SCM')
  PsiComment(function_doc_comment)('%% type, location and revision). Rebar currently supports git, hg, bzr and svn.')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('deps')
    PsiElement(,)(',')
    ERL_LIST_EXPRESSION
      PsiElement([)('[')
      ERL_CONFIG_EXPRESSION
        ERL_Q_ATOM
          ERL_ATOM
            PsiElement(atom_name)('application_name')
      PsiElement(,)(',')
      ERL_TUPLE_EXPRESSION
        PsiElement({)('{')
        ERL_CONFIG_EXPRESSION
          ERL_Q_ATOM
            ERL_ATOM
              PsiElement(atom_name)('application_name')
        PsiElement(,)(',')
        ERL_STRING_LITERAL
          PsiElement(string)('"1.0.*"')
        PsiElement(})('}')
      PsiElement(,)(',')
      ERL_TUPLE_EXPRESSION
        PsiElement({)('{')
        ERL_CONFIG_EXPRESSION
          ERL_Q_ATOM
            ERL_ATOM
              PsiElement(atom_name)('application_name')
        PsiElement(,)(',')
        ERL_STRING_LITERAL
          PsiElement(string)('"1.0.*"')
        PsiElement(,)(',')
        ERL_TUPLE_EXPRESSION
          PsiElement({)('{')
          ERL_CONFIG_EXPRESSION
            ERL_Q_ATOM
              ERL_ATOM
                PsiElement(atom_name)('git')
          PsiElement(,)(',')
          ERL_STRING_LITERAL
            PsiElement(string)('"git://github.com/basho/rebar.git"')
          PsiElement(,)(',')
          ERL_TUPLE_EXPRESSION
            PsiElement({)('{')
            ERL_CONFIG_EXPRESSION
              ERL_Q_ATOM
                ERL_ATOM
                  PsiElement(atom_name)('branch')
            PsiElement(,)(',')
            ERL_STRING_LITERAL
              PsiElement(string)('"master"')
            PsiElement(})('}')
          PsiElement(})('}')
        PsiElement(})('}')
      PsiElement(])(']')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% == Subdirectories ==')
  PsiComment(function_doc_comment)('%% Subdirectories?')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('sub_dirs')
    PsiElement(,)(',')
    ERL_LIST_EXPRESSION
      PsiElement([)('[')
      ERL_STRING_LITERAL
        PsiElement(string)('"dir1"')
      PsiElement(,)(',')
      ERL_STRING_LITERAL
        PsiElement(string)('"dir2"')
      PsiElement(])(']')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% == Plugins ==')
  PsiComment(function_doc_comment)('%% Plugins you wish to include.')
  PsiComment(function_doc_comment)('%% These can include any module on the code path, including deps.')
  PsiComment(function_doc_comment)('%% Alternatively, plugins can be placed as source files in the plugin_dir, in')
  PsiComment(function_doc_comment)('%% which case they will be compiled and loaded dynamically at runtime.')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('plugins')
    PsiElement(,)(',')
    ERL_LIST_EXPRESSION
      PsiElement([)('[')
      ERL_CONFIG_EXPRESSION
        ERL_Q_ATOM
          ERL_ATOM
            PsiElement(atom_name)('plugin1')
      PsiElement(,)(',')
      ERL_CONFIG_EXPRESSION
        ERL_Q_ATOM
          ERL_ATOM
            PsiElement(atom_name)('plugin2')
      PsiElement(])(']')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% Override the directory in which plugin sources can be found.')
  PsiComment(function_doc_comment)('%% Defaults to ./plugins')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('plugin_dir')
    PsiElement(,)(',')
    ERL_STRING_LITERAL
      PsiElement(string)('"some_other_directory"')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% == Pre/Post Command Hooks ==')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('pre_hooks')
    PsiElement(,)(',')
    ERL_LIST_EXPRESSION
      PsiElement([)('[')
      ERL_TUPLE_EXPRESSION
        PsiElement({)('{')
        ERL_CONFIG_EXPRESSION
          ERL_Q_ATOM
            ERL_ATOM
              PsiElement(atom_name)('clean')
        PsiElement(,)(',')
        ERL_STRING_LITERAL
          PsiElement(string)('"./prepare_package_files.sh"')
        PsiElement(})('}')
      PsiElement(,)(',')
      ERL_TUPLE_EXPRESSION
        PsiElement({)('{')
        ERL_STRING_LITERAL
          PsiElement(string)('"linux"')
        PsiElement(,)(',')
        ERL_CONFIG_EXPRESSION
          ERL_Q_ATOM
            ERL_ATOM
              PsiElement(atom_name)('compile')
        PsiElement(,)(',')
        ERL_STRING_LITERAL
          PsiElement(string)('"c_src/build_linux.sh"')
        PsiElement(})('}')
      PsiElement(,)(',')
      ERL_TUPLE_EXPRESSION
        PsiElement({)('{')
        ERL_CONFIG_EXPRESSION
          ERL_Q_ATOM
            ERL_ATOM
              PsiElement(atom_name)('compile')
        PsiElement(,)(',')
        ERL_STRING_LITERAL
          PsiElement(string)('"escript generate_headers"')
        PsiElement(})('}')
      PsiElement(,)(',')
      ERL_TUPLE_EXPRESSION
        PsiElement({)('{')
        ERL_CONFIG_EXPRESSION
          ERL_Q_ATOM
            ERL_ATOM
              PsiElement(atom_name)('compile')
        PsiElement(,)(',')
        ERL_STRING_LITERAL
          PsiElement(string)('"escript check_headers"')
        PsiElement(})('}')
      PsiElement(])(']')
    PsiElement(})('}')
    PsiElement(.)('.')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('post_hooks')
    PsiElement(,)(',')
    ERL_LIST_EXPRESSION
      PsiElement([)('[')
      ERL_TUPLE_EXPRESSION
        PsiElement({)('{')
        ERL_CONFIG_EXPRESSION
          ERL_Q_ATOM
            ERL_ATOM
              PsiElement(atom_name)('clean')
        PsiElement(,)(',')
        ERL_STRING_LITERAL
          PsiElement(string)('"touch file1.out"')
        PsiElement(})('}')
      PsiElement(,)(',')
      ERL_TUPLE_EXPRESSION
        PsiElement({)('{')
        ERL_STRING_LITERAL
          PsiElement(string)('"freebsd"')
        PsiElement(,)(',')
        ERL_CONFIG_EXPRESSION
          ERL_Q_ATOM
            ERL_ATOM
              PsiElement(atom_name)('compile')
        PsiElement(,)(',')
        ERL_STRING_LITERAL
          PsiElement(string)('"c_src/freebsd_tweaks.sh"')
        PsiElement(})('}')
      PsiElement(,)(',')
      ERL_TUPLE_EXPRESSION
        PsiElement({)('{')
        ERL_CONFIG_EXPRESSION
          ERL_Q_ATOM
            ERL_ATOM
              PsiElement(atom_name)('eunit')
        PsiElement(,)(',')
        ERL_STRING_LITERAL
          PsiElement(string)('"touch file2.out"')
        PsiElement(})('}')
      PsiElement(,)(',')
      ERL_TUPLE_EXPRESSION
        PsiElement({)('{')
        ERL_CONFIG_EXPRESSION
          ERL_Q_ATOM
            ERL_ATOM
              PsiElement(atom_name)('compile')
        PsiElement(,)(',')
        ERL_STRING_LITERAL
          PsiElement(string)('"touch postcompile.out"')
        PsiElement(})('}')
      PsiElement(])(']')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% == xref ==')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('xref_warnings')
    PsiElement(,)(',')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('false')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% xref checks to run')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('xref_checks')
    PsiElement(,)(',')
    ERL_LIST_EXPRESSION
      PsiElement([)('[')
      ERL_CONFIG_EXPRESSION
        ERL_Q_ATOM
          ERL_ATOM
            PsiElement(atom_name)('exports_not_used')
      PsiElement(,)(',')
      ERL_CONFIG_EXPRESSION
        ERL_Q_ATOM
          ERL_ATOM
            PsiElement(atom_name)('undefined_function_calls')
      PsiElement(])(']')
    PsiElement(})('}')
    PsiElement(.)('.')
  PsiComment(function_doc_comment)('%% Optional custom xref queries (xref manual has details) specified as')
  PsiComment(function_doc_comment)('%%     {xref_queries, [{query_string(), expected_query_result()},...]}')
  PsiComment(function_doc_comment)('%% The following for example removes all references to ejabberd:*_msg/4')
  PsiComment(function_doc_comment)('%% functions from undefined external function calls as those are in a')
  PsiComment(function_doc_comment)('%% generated module')
  ERL_TUPLE_EXPRESSION
    PsiElement({)('{')
    ERL_CONFIG_EXPRESSION
      ERL_Q_ATOM
        ERL_ATOM
          PsiElement(atom_name)('xref_queries')
    PsiElement(,)(',')
    ERL_LIST_EXPRESSION
      PsiElement([)('[')
      ERL_TUPLE_EXPRESSION
        PsiElement({)('{')
        ERL_CONFIG_EXPRESSION
          ERL_STRING_LITERAL
            PsiElement(string)('"(XC - UC) || (XU - X - B"')
          ERL_STRING_LITERAL
            PsiElement(string)('" - (\"ejabberd_logger\":\".*_msg\"/\"4\"))"')
        PsiElement(,)(',')
        ERL_LIST_EXPRESSION
          PsiElement([)('[')
          PsiElement(])(']')
        PsiElement(})('}')
      PsiElement(])(']')
    PsiElement(})('}')
    PsiElement(.)('.')
